As computer networks have become faster and more reliable, the deployment of network data storage systems in enterprise computing environments has become more widespread. In a typical enterprise computing environment, client systems such as computer workstations, database servers, web servers, and other application servers can access data stored remotely from the client systems, typically in one or more central locations. One or more computer networks, e.g., one or more local area networks (LANs) or wide area networks (WANs), connect the client systems to mass storage devices such as disks disposed at the central locations. Such centralized data storage, referred to hereinafter as “network data storage”, facilitates the sharing of data among many geographically distributed client systems. Network data storage also enables information systems (IS) departments to use highly reliable (sometimes redundant) computer equipment to store their data.
In the typical network data storage environment, specialized computers such as file servers, storage servers, storage appliances, etc. (referred to hereinafter as “storage servers”) located at the central locations make the data stored on the disks available to the client systems. Each storage server typically has a monolithic architecture, in which network and data components are contained within a single device. Software running on the storage servers and other software running on the client systems communicate according to well-known protocols such as the Network File System (NFS) protocol and the Common Internet File System (CIFS) protocol to make the data stored on the disks appear to users and application programs as though the data were stored locally on the client systems. Each storage server makes data available to the client systems by presenting or exporting one or more volumes, or one or more sub-volume units referred to herein as “qtrees”, to the client systems. Each volume is configured to store data files, scripts, word processing documents, executable programs, and the like. From the perspective of a client system, each volume can appear to be a single disk drive. However, each volume can represent the storage space in a single storage device, a redundant array of independent disks (RAID) or a RAID group, an aggregate of some or all of the storage space in a set of storage devices, or any other suitable set of storage space.
Specifically, each volume can include a number of individually addressable files. For example, in a network attached storage (NAS) configuration, the files of a volume are addressable over a computer network for file-based access. Each volume may be composed of all or a portion of the storage available on a single disk or on multiple disks. In addition, an aggregate is a fixed-sized volume built on top of a number of RAID groups which contain other volumes referred to herein as “virtual volumes” or “FlexVol® flexible volumes”. An aggregate is therefore a container for virtual or flexible volumes. Accordingly, there are generally two types of volumes, i.e., traditional volumes that are built directly on top of RAID groups, and virtual or flexible volumes that are built on aggregates, which in turn are built on top of RAID groups, which in turn are built on top of whole drives.
In a typical mode of operation, a client system transmits one or more input/output commands such as a request for data over a network to a storage server or a virtual storage server, which receives the request, issues one or more I/O commands to the appropriate disk(s) to read or write the data on behalf of the client system, and issues a response containing the requested data to the client system. It should be understood that a storage server can be partitioned into a number of virtual storage servers for administrative purposes. Further, a fixed-sized volume (i.e., an aggregate) can be partitioned into a number of virtual or flexible volumes. Any suitable combination of storage servers and volumes is possible, such as a storage server with fixed-sized volumes, a storage server with virtual or flexible volumes built on aggregates, a virtual storage server with fixed-sized volumes, and a virtual storage server with virtual or flexible volumes.
Multiple storage servers can be arranged in a cluster configuration to form a single storage server system. Such a clustered storage server system has a distributed architecture that includes a plurality of server nodes interconnected by a switching fabric. Each server node typically includes a network module (an N-module), a disk module (a D-module), and a management module (an M-host). The N-module provides functionality that enables a respective node within the clustered system to connect to a client system over a computer network, the D-module provides functionality enabling the respective node to connect to one or more disks, and the M-host provides management functions for the clustered system. A switched virtualization layer is provided below the interface between the N-module and the client system(s), allowing the disks associated with the multiple nodes in the cluster configuration to be presented to the client system(s) as a single shared storage pool. In a typical mode of operation, a client system transmits an NFS or CIFS request for data to one of the server nodes within the clustered system. The request typically includes a file handle for a data file stored in a specified volume. The N-module within the node that received the request extracts a volume identifier from the file handle, and uses the volume identifier to index a volume location database (VLDB) to obtain an identification of the aggregate storing the specified volume. The N-module then uses the aggregate identification to locate the D-module responsible for the aggregate, and transmits a request to the D-module for the data on the specified volume using an internal protocol. The D-module executes the request, and transmits, using the internal protocol, a response containing the requested volume data back to the N-module, which in turn transmits an NFS or CIFS response with the requested data to the client system. In this way, the N-modules can export, to one or more client systems, one or more volumes that are stored on aggregates accessible via the D-modules.
The clustered storage server system with the distributed architecture has a number of advantages over the traditional storage server with the monolithic architecture. For example, the clustered storage server system provides horizontal scalability, allowing one or more server nodes to be added to the clustered system as the number of client systems connected to the network increases. Further, the clustered system allows for the migration of network virtual interfaces (VIFs) and the migration of volume data among the multiple server nodes, and provides load sharing for mirrors of volumes. Moreover, in the clustered system, the names of the volumes from the multiple server nodes can be linked into a virtual global hierarchical namespace, allowing the client systems to mount the volumes from the various server nodes with increased flexibility. In addition, in the clustered system, if one of the server nodes fails, then another one of the server nodes can assume the tasks of processing and handling any data requests normally processed by the node that failed, thereby providing an effective failover mechanism.
For at least the reasons discussed above, IS departments are increasingly transitioning from traditional monolithic storage servers to distributed storage server systems to satisfy their network data storage needs. It would be desirable, however, to provide users of network data storage systems with the ability to gain the advantages of clustered storage server systems during the transition period from traditional storage servers to distributed storage server systems, without first having to migrate their data from the traditional storage servers to the distributed storage server systems.